package com.qf.entity;

/*存放所有玩家的落子数据及判断输赢*/
public class Gobang {
    //使用二维数组代表棋盘
    private Integer[][] gobang = new Integer[17][17];

    //返回true可以落子，返回false不能落子
    public boolean go(int x, int y, int color) {
        //判断是否能落子，true可落子，false不可以
        Integer z = gobang[x][y];
        if (z == null) {
            //说明当前位置可以落子
            gobang[x][y] = color;
            return true;
        }
        return false;
    }
    //悔棋
    public int reMoveStep(int x,int y) {
        gobang[x][y] = null;
        return 1;
    }

    //返回true表示胜利
    public boolean isWin(int x, int y, int color) {
        int clientx = x;
        int clienty = y;
        //判断横向-先判断左边
        int count = 1;
        while (x > 0 && gobang[--x][y] != null && gobang[x][y] == color) {
            count++;
        }
        x = clientx;
        y = clienty;
        //判断横向-右边

        while (x < gobang.length - 1 && gobang[++x][y] != null && gobang[x][y] == color) {
            count++;
        }
        x = clientx;
        y = clienty;
        if (count >= 5) {
            return true;
        }
        count = 1;
        //判断纵向向上
        while (y > 0 && gobang[x][--y] != null && gobang[x][y] == color) {
            count++;
        }
        x = clientx;
        y = clienty;
        //向下判断
        while (y < gobang.length - 1 && gobang[x][++y] != null && gobang[x][y] == color) {
            count++;
        }
        x = clientx;
        y = clienty;
        if (count >= 5) {
            return true;
        }
        //判断左斜
        count = 1;
        while (x > 0 && y > 0 && gobang[--x][--y] != null && gobang[x][y] == color) {
            count++;
        }
        x = clientx;
        y = clienty;
        //右下方
        while (x < gobang.length - 1 && y < gobang.length - 1 && gobang[++x][++y] != null && gobang[x][y] == color) {
            count++;
        }
        x = clientx;
        y = clienty;
        if (count >= 5) {
            return true;
        }
        //判断右斜
        count = 1;
        //右上方
        while (x < gobang.length - 1 && y > 0 && gobang[++x][--y] != null && gobang[x][y] == color) {
            count++;
        }
        x = clientx;
        y = clienty;
        //左下方
        while (x > 0 && y < gobang.length - 1 && gobang[--x][++y] != null && gobang[x][y] == color) {
            count++;
        }
        x = clientx;
        y = clienty;
        if (count >= 5) {
            return true;
        }
        return false;
    }
}
